/*****
  ** @file     : mt6816.c/h
  ** @brief    : MT6816传感器硬件驱动
*****/

#ifndef MT6816_H
#define MT6816_H

#ifdef __cplusplus
extern "C" {
#endif

//引用端口定义
#include "kernel_port.h"

//MT6816工作模式定义
#define MT6816_Mode_PWM        (0x01)    //MT6816工作在PWM模式        (支持该模式的硬件版本：XDrive_REIN_Basic_H1_0)
#define MT6816_Mode_ABZ        (0x02)    //MT6816工作在ABZ模式        (支持该模式的硬件版本：XDrive_REIN_Basic_H1_0)
#define MT6816_Mode_SPI        (0x03)    //MT6816工作在SPI模式        (支持该模式的硬件版本：XDrive_REIN_Basic_H1_0 / XDrive_REIN_Basic_H1_1)

//MT6816工作模式配置
#define MT6816_Mode        MT6816_Mode_SPI

#if (MT6816_Mode == MT6816_Mode_SPI)
/********** MT6816_SPI **********/
/********** MT6816_SPI **********/
/********** MT6816_SPI **********/
typedef struct{
    //采集数据
    uint16_t    sample_data;    //SPI读取到的数据
    //输出数据
    uint16_t    angle;                //SPI输出的角度
    bool            no_mag_flag;    //磁铁数据有效标志
    bool            pc_flag;            //奇偶校验位
}MT6816_SPI_Signal_Typedef;

//MT6816_SPI
void REIN_MT6816_SPI_Signal_Init(void);        //MT6816_SPI采集初始化
void RINE_MT6816_SPI_Get_AngleData(void);    //MT6816_SPI采集获取角度数据

#endif

/********** MT6816 **********/
/********** MT6816 **********/
/********** MT6816 **********/
typedef struct{
    uint16_t    angle_data;                //角度数据
    uint16_t    rectify_angle;        //校准的角度数据
    bool            rectify_valid;        //校准数据有效标志
}MT6816_Typedef;
extern MT6816_Typedef    mt6816;

//MT6816
void REIN_MT6816_Init(void);                            //MT6816初始化
void REIN_MT6816_Get_AngleData(void);            //MT6816获取角度数据

#ifdef __cplusplus
}
#endif
     
#endif
